package com.weipt.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * @author weipt
 * @description 给整个queue设置过期ttl，那么进入这个quueue的消息都会遵守ttl过期
 * @date 2024/1/15 22:23
 */
@Configuration
public class TtlFanoutQueueConfig {

    @Bean
    public FanoutExchange fanoutTtlExchange(){
        return new FanoutExchange("fanout-ttl-exchange-springboot", true, false);
    }

    /**
     *
     * String name,
     * boolean durable,
     * boolean exclusive,
     * boolean autoDelete,
     * @Nullable Map<String, Object> arguments
     */
    @Bean
    public Queue smsTtlQueue(){
        Map<String, Object> argsMap = new HashMap<>();
        //rabbit管理平台，可以在queues界面，有个arguments参数，下面可以有你想要的内容
        //不过这个我觉得要是做的好，可以支持传入一个bean对象进来
        //当我们我们自己可以定义一个bean，然后加上@JsonPropertis等注解，然后利用beanToMap转换
        argsMap.put("x-message-ttl", 5000); //ms
        return new Queue("sms-ttl-queue", true, false,false, argsMap);
    }

    @Bean
    public Binding smsTtlBinding(){
        return BindingBuilder.bind(smsTtlQueue()).to(fanoutTtlExchange());
    }


}
